/** 
 * @memo 简化创建Ext-tree方法 
 * @author sunxing
 * @sample 粘贴用
 
 	     var tree = new XTree({
			 id:'tree',
			 key:'key',
		     height:500,
		     width:300,
			 baseParams:{num:5}
		 });
		 
 * @detail 注释
		 
		 var tree = new Tree({
			 id:'tree',                //必选参数，唯一标识
			 key:'key',                //必选参数，sql语句的key
			 enableDD:false,				//可选参数，是否允许拖拽，true为允许，false为不允许，默认为false
			 useArrows:false,          //可选参数，是否使用箭头记号，true为使用，false为不使用，默认为false
	       rootVisible:true,			//可选参数，是否显示根节点，true为显示，false为不显示，默认为true
	       border:true,              //可选参数，是否显示边界，true为显示，false为不显示，默认为true
	       height:500,					//可选参数，树的高度，不写为autoHeight
	       width:300,						//可选参数，数的宽度，当layout:'fit'时可省略
			 root:{                    //可选参数，根节点属性，不写为以下默认值
				nodeType: 'async',      //根节点类型，默认为动态
				text: '根节点',          //根节点文字，默认为'跟节点'
				draggable: false,       //是否激活此面板拖动，true为是，false为否，默认为false
				id: '-1'                //根节点值，默认为'-1'
			 },
			 treeRootText:'根节点',     //可选参数，根节点文字，优先级高于root
			 treeRootValue:'-1', 		//可选参数，根节点值，优先级高于root
			 draggable:false,				//可选参数，是否激活此面板拖动，优先级高于root
			 baseParams:{num:5}			//可选参数，向后台传递参数,参数为id时为根节点值，优先级高于treeRootValue
		 });
 * @method
 		tree.setParams(fliter) 向后台传递参数，改变树显示内容，参数为json串，参数为id时为改变根节点值,参数为key时重新设置key。
 		tree.setRoot(root) 改变根节点的属性，参数为json串，无法改变根节点值，id属性没有作用。
		tree.setKey(key) 重新设置key ,用来显示其他sql语句。	
		tree.reload() 刷新当前树。	
		 
 */
var XTree=Ext.extend(Ext.tree.TreePanel,{
	enableDD:false,
	useArrows:false,
	rootVisible:true,
	border:true,
	root:{
		nodeType: 'async',
		text: '根节点',
		draggable: false,
		id: '-1'
	},
	initComponent:function(){
		var l = this.loader;
		if(!l){
		if(typeof(plcdataid)!="undefined"){
			l = new Ext.tree.TreeLoader({
                dataUrl: getRootPath()+'/treeQuery.tree?method=queryNode&key='+this.key+'&plcdataid='+plcdataid,
                listeners:{beforeload:function(treeLoader, node) {
			      	this.baseParams.id = node.id;
					 }}
            });
		}else{
            l = new Ext.tree.TreeLoader({
                dataUrl: getRootPath()+'/treeQuery.tree?method=queryNode&key='+this.key,
                listeners:{beforeload:function(treeLoader, node) {
                
			      	this.baseParams.id = node.id;
					 }}
            });
      }
      }else if(typeof l == 'object' && !l.load){
            l = new Ext.tree.TreeLoader(l);
      }
      this.loader = l;
      XTree.superclass.initComponent.call(this);
      if(this.treeRootText){
      	this.root.text=this.treeRootText;
      };
      if(this.treeRootValue){
      	this.root.id=this.treeRootValue;
      };
      if(this.draggable){
      	this.root.draggable=this.draggable;
      };
      if(this.baseParams){
			this.setParams(this.baseParams);
		};
		if(isNull(this.height)){
			this.autoHeight=true;
		};
	},
	setParams:function(filter){
		var loader=this.loader;
		loader.baseParams=filter;
		if(filter.id){
			this.root.id=filter.id;
		}
		if(filter.key){
			this.key=filter.key;
			this.loader.dataUrl=getRootPath()+'/treeQuery.tree?method=queryNode&key='+this.key;
		}
		this.root.reload();
	},
	setRoot:function(root){
		root.id=this.root.id;
		this.setRootNode(new Ext.tree.AsyncTreeNode(root));
	},
	setKey:function(key){
		this.key=key;
		this.loader.dataUrl=getRootPath()+'/treeQuery.tree?method=queryNode&key='+this.key;
		this.root.reload();
	},
	reload:function(){
		this.root.reload();
	}
});
Ext.reg('xtree', XTree);
//非空判断
function isNull(o){
	return (typeof(o) == 'undefined' || o == null);
}